package com;

/**
 * 单例设计模式
 */
public class SingletonTest {
    public static void main(String[] args) {
        SingletonDemo1 singletonDemo1 = SingletonDemo1.getSingletonDemo1();
        SingletonDemo2 singletonDemo2 = SingletonDemo2.getSingletonDemo2();
    }
}

/**
 * 饿汉式
 * 1.定义一个该类的私有静态变量并实例化
 * 2.私有构造方法
 * 3.提供一个静态的get方法获取实例
 */
class SingletonDemo1 {
    private static SingletonDemo1 singletonDemo1=new SingletonDemo1();
   private SingletonDemo1(){

    }
    public static SingletonDemo1 getSingletonDemo1(){
        return singletonDemo1;
    }
}

/**
 * 懒汉式
 * 1.定义一个该类的私有静态变量
 * 2.私有构造方法
 * 3.提供一个静态的get方法获取实例，先判断该实例是否存在，若不存在再实例化
 */
class SingletonDemo2{
    private static SingletonDemo2 singletonDemo2;
    private SingletonDemo2(){}
    public static SingletonDemo2 getSingletonDemo2(){
        if (singletonDemo2==null){
             singletonDemo2=new SingletonDemo2();
        }
            return singletonDemo2;
    }
}